package cn.qvtu.game;
import cn.qvtu.game.frame.MyFrame;
import cn.qvtu.game.util.StaticValue;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import javax.swing.JButton;
import javax.swing.*;

import static cn.qvtu.game.util.StaticValue.menu;

public class GamePanel extends JPanel implements KeyListener
{
    /** 屏幕的宽和高 */
    private int width,height;

    public GamePanel(int width, int height)
    {
        this.width = width;
        this.height = height;
        this.setSize(width, height);

        //设置当前画布可以获得焦点。
        this.setFocusable(true);
        //设置自己为自己的按键事件监听器
        this.addKeyListener(this);
//        this.addMouseListener();
    }



    /**要显示的菜单项*/
    private String[] menus = new String[]{"单人游戏", "双人游戏","游戏设置", "帮助关于", "退出游戏"};
    /**当前焦点在哪个菜单项*/
    private int focusIndex;

    /**菜单项位置的横坐标*/
    private int menu_x = 1260;

    /**菜单项位置的纵坐标*/
    private int[] menu_ys = new int[]{600, 630, 660, 690, 720};



    /**
     * 覆盖paintComponent()方法
     */
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        //画绿色背景
        g.setColor(new Color(0x9391d6));
        g.fillRect(0, 0, width, height);
        g.drawImage(menu,0,0,this);
        //绘制菜单项。焦点所在的菜单用红色，其它为黑色。
        g.setFont(new Font("宋体",Font.BOLD,20));
        for (int i = 0; i < menus.length; i++)
        {
            int x = menu_x;
            int y = menu_ys[i];

            //如果是焦点按钮，用红色突出
            if(i == focusIndex)
            {
                g.setColor(Color.red);
            }
            else
            {
                g.setColor(Color.white);
            }

            g.drawString(menus[i], x, y);
        }
    }



    /**
     * 当键盘上的键被按下，程序会调用这个方法，来处理这个按下事件
     */
    @Override
    public void keyPressed(KeyEvent e)
    {
        int keyCode = e.getKeyCode();  //根据keyCode能知道按下的是哪个键
        switch(keyCode)
        {
            case KeyEvent.VK_UP://往上的方向键
                focusIndex = (focusIndex + menus.length - 1) % menus.length;   //考虑%取余的意义。
                this.repaint(); //刷新画布
                break;
            case KeyEvent.VK_DOWN://往下的方向键
                focusIndex = (focusIndex + 1) % menus.length;
                this.repaint();
                break;
            case KeyEvent.VK_ENTER: //如果是Enter键
                //----------------这里就可以根据focusIndex知道按下的是哪个菜单项，从而进行对应操作
                if (focusIndex == 0)//如果focusIndex为0,则转到游戏界面。
                {
                    this.setVisible(false);
                    new MyFrame();
                }
                else if (focusIndex == 4)//如果focusIndex为4，则退出游戏
                {
                    System.exit(-1);
                }
                //----------------比如，如果focusIndex为2，则转到帮助关于的界面。
                System.out.println(focusIndex + " , " + menus[focusIndex]);
                break;
            case KeyEvent.VK_ESCAPE:
                this.setVisible(false);
                System.exit(-1);
                break;
        }
    }


    @Override
    public void keyReleased(KeyEvent e)
    {

    }

    @Override
    public void keyTyped(KeyEvent e)
    {

    }
}
